package jm.nj.demo13mian.demo09;

/*
 *  * 出现了线程的安全问题:有重复,0,-1的票
 *
 * 解决线程安全问题可以使用同步技术
 * 1.同步代码块
 * synchronized(锁对象){
 *      可能出现安全问题的代码
 *      (访问共享数据的代码)
 * }
 * 注意:必须要保证3个线程使用的锁对象是同一个
 *
 * */
public class RunnableImpl implements Runnable {
    //定义共享票源
    private int ticket = 10;
    private Object obj = new Object();//成员位置

    @Override
    public void run() {
        //设置死循环,让3个线程买票,重复执行
        while (true) {
            synchronized (obj){

                if (ticket > 0) {
                    try {
                        Thread.sleep(10);

                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    System.out.println(Thread.currentThread().getName() + "...正在买第" + ticket-- + "张票");

                }
            }
        }
    }
}
